home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Technotools
/
Technotools (Chestnut CD-ROM)(1993).ISO
/
database
/
tpndx_sk
/
ndx_seek.pas
next >
Wrap
Pascal/Delphi Source File
|
1991-03-23
|
2KB
|
104 lines
{$E+,I-,N+,R-,V- -80x87 emulation, no I/O errors, no range checks}
PROGRAM NDX_Seek;
USES NDX, dBASE;
VAR
N, N1: _NDX;
D: DBFile;
DBFrecP: CharPtr;
Key: KeyStr;
NKey: Double;
Count, ec: INTEGER;
CONST
Done: Boolean = FALSE;
Quick: Boolean = FALSE;
Procedure DisplayRec (RecNo: LONGINT);
BEGIN
IF RecNo <> 0 THEN
BEGIN
DBFreadRec (RecNo, D, DBFrecP);
DBFdispRec (RecNo, D, DBFrecP);
Inc (Count);
END;
END;
{$F+} PROCEDURE ProcessRec (Var N: _NDX; Var entry: NDXentry);
BEGIN
DisplayRec (Entry^.RecNo);
END;
{$F-}
BEGIN
NDXopen (N, 'Test.NDX');
NDXopen (N1, 'NTEST.NDX');
D := DBFopen ('Test.DBF');
IF DBFreadHdr (D) <> 0 THEN
BEGIN
WriteLn(' Error reading DBF or DBF empty.');
Halt(1);
END;
If Not DBFreadStru (D) THEN
BEGIN
WriteLn ('Error Reading DBF Field Information.');
Halt (1);
END;
GetMem (DBFrecP, D^.RecLen);
WHILE NOT Done DO
BEGIN
Count :=0;
Write ('Enter key ("/h" for help): ');
ReadLn(Key);
IF Key = '/l' THEN
NDXTraverse (N, ProcessRec)
ELSE IF Key = '/ln' THEN
NDXTraverse (n1, ProcessRec)
ELSE IF Key = '/x' THEN
Done := TRUE
ELSE IF Key = '/exact on' THEN
SetExact := TRUE
ELSE IF Key = '/exact off' THEN
SetExact := FALSE
ELSE IF Key ='/quick on' THEN
Quick := TRUE
ELSE IF Key ='quick off' THEN
Quick := FALSE
ELSE IF Key = '/h' THEN
BEGIN
WriteLn ('Enter alphanumeric or numeric key or:');
WriteLn (' /l -list all alphanumerically');
WriteLn (' /ln -list all numericallly');
WriteLn (' /x -Exit');
WriteLn (' /exact on -match key exactly');
WriteLn (' /exact off -match key to letters typed');
WriteLn (' /quick on -match first record only');
WriteLn (' /quick off -match first record only');
END
ELSE
BEGIN
Val (Key, NKey, ec);
IF ec = 0 THEN
IF Quick THEN
DisplayRec (NDXseekN (N1, NKey))
ELSE
NDXseekAllN (N1, ProcessRec, NKEy)
ELSE
IF Quick THEN
DisplayRec (NDXseek (N, Key));
ELSE
NDXseekAll (N, ProcessRec, Key);
END;
WriteLn ('=>Count=', Count,'; Quick=', quick,'Exact=',SetExact);
END;
NDXclose (N);
NDXclose (N1);
IF DBFclose (D) THEN
END.